package andraus.bluetoothhidemu;
import andraus.bluetoothhidemu.sock.SocketManager;
import andraus.bluetoothhidemu.sock.payload.HidKeyPair;
import andraus.bluetoothhidemu.sock.payload.HidKeyboardPayload;
import android.text.Editable;
import android.text.InputType;
import android.text.method.KeyListener;
import android.text.method.TextKeyListener;
import android.text.method.TextKeyListener.Capitalize;
import android.view.KeyEvent;
import android.view.View;
/**
* KeyListener to monitor keypresses
*/
public class KeyboardKeyListener implements KeyListener {
//private static final String TAG = BluetoothHidEmuActivity.TAG;
private SocketManager mSocketManager = null;
private TextKeyListener mTextKeyListener = null;
private HidKeyboardPayload mHidPayload = new HidKeyboardPayload();
public KeyboardKeyListener(SocketManager socketManager) {
super();
mTextKeyListener = new TextKeyListener(Capitalize.NONE, false);
mSocketManager = socketManager;
}
@Override
public void clearMetaKeyState(View view, Editable content, int states) {
mTextKeyListener.clearMetaKeyState(view, content, states);
}
@Override
public int getInputType() {
return InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
}
@Override
public boolean onKeyDown(View view, Editable content, int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_ENTER:
TextKeyListener.clear(content);
mHidPayload.assemblePayload(HidKeyPair.ENTER);
mSocketManager.sendPayload(mHidPayload);
return true;
case KeyEvent.KEYCODE_DEL:
mHidPayload.assemblePayload(HidKeyPair.DEL);
mSocketManager.sendPayload(mHidPayload);
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_DOWN:
mHidPayload.assemblePayload(keyCode);
mSocketManager.sendPayload(mHidPayload);
default:
return mTextKeyListener.onKeyDown(view, content, keyCode, event);
}
}
@Override
public boolean onKeyOther(View view, Editable content, KeyEvent event) {
return mTextKeyListener.onKeyOther(view, content, event);
}
@Override
public boolean onKeyUp(View view, Editable content, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER
|| keyCode == KeyEvent.KEYCODE_DEL
|| keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
mHidPayload.assemblePayload(Character.MIN_VALUE);
mSocketManager.sendPayload(mHidPayload);
}
return mTextKeyListener.onKeyUp(view, content, keyCode, event);
}
}